package ch13;
/*6：baidu StringBuilder比StringBuffer的区别。*/
public class ch13exer7 {
    public static void main(String[] args) {
        /*
String：适用于少量的字符串操作。
StringBuilder：适用于单线程下在字符串缓冲区进行大量操作。
StringBuffer：适用于多线程下在字符串缓冲区进行大量操作。
StringBuilder与StringBuffer的区别：
区别一：String是final类不能被继承且为字符串常量，而StringBuilder和StringBuffer均为字符串变量。
        在Java中字符串使用String类进行表示，但是String类表示字符串有一个最大的问题：
        “字符串常量一旦声明则不可改变，而字符串对象可以改变，但是改变的是其内存地址的指向。
        ”所以String类不适合于频繁修改的字符串操作上，
        所以在这种情况下，往往可以使用StringBuffer类，即StringBuffer类方便用户进行内容修改。
        即：
        （String类型是字符串常量，当进行字符串操作时，地址即发生改变。
        StringBuffer和StringBuilder类型是字符串变量，当使用apend()等操作时，内存地址不发生变化）

区别二：在String类中使用“+”作为数据的连接操作，而在StringBuffer类中使用append()方法
        （方法定义：public StringBuffer append(数据类型 变量)）进行数据连接。

区别三：类的定义不同
String类：
        public final class String extends Object implements Serializable, Comparable<String>, CharSequence
StringBuffer类：
        public final class StringBuffer extends Object implements Serializable,CharSequence
StringBuilder类：
        public final class StringBuilder extends Object implements Serializable,CharSequence
通过三个定义结构可以发现，String、StringBuffer和StringBuilder类都是CharSequence接口的子类，
也就证明String、StringBuffer和StringBuilder类的对象都可以利用自动向上转型的操作为CharSequence接口实例化。

区别四：String类和StringBuilder、StringBuffer类的转换。
        1.String类通过apend()方法转换成StringBuilder和StringBuffer类。
            根据输出结果可以得出，将字符串str，通过append()方法转换成StringBuffer类和StringBuilder类。
            （getClass（）方法：获得类别）
        2.StringBuffer类和StringBuilder类通过to.String()方法转换成String类型

区别五：String类、StringBuffer和StringBuilder类中定义的常用方法，三类的大部分方法(下例)可以互补。
        public StringBuffer append()
        public StringBuffer reverse()
        public StringBuffer insert()
        ....

区别六：线程安全性方面
        1.StringBuilder（非线程安全）
        该类提供一个与StringBuffer兼容的 API，但不能保证同步，所以在性能上较高。
        该类被设计用作 StringBuffer 的一个简易替换，用在字符串缓冲区被单个线程使用的时候。
        如果可能，建议优先采用该类，因为在大多数实现中，它比 StringBuffer 要快。两者的方法基本相同。

        2.StringBuffer（线程安全的）
        StringBuffer上的主要操作是 append 和 insert 方法，可重载这些方法，
        以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串，
        然后将该字符串的字符追加或插入到字符串缓冲区中。
        append 方法始终将这些字符添加到缓冲区的末端；而 insert 方法则在指定的点添加字符。



*/
    }
}
